﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using Infragistics.Documents.Excel;
using System.Globalization;

/*****************************************************************************************************************          
 Copyright © 2010 - Banco Itaú BBA S.A          
         
 Exportação para Excel de Contratos:  Tela que chama a tela 
            
 Histórico de Alterações:      
  18/06/2010 - Adriane M Souza	- Criacao OS375720

 *****************************************************************************************************************/

namespace ibba.src.norisk
{
    public partial class PageGarantiaContratoExpExcel : ChildWindow
    {
        #region VARIAVEIS

        private List<ServiceGarantiaContrato.TipoParametroGarantia> _listTiposParametros;

        private int _valorSelecionado;

        private List<ServiceGarantiaContrato.GarantiaContrato> _listRelatorio;

        #endregion

        #region CONSTRUTOR

        public PageGarantiaContratoExpExcel()
        {
            InitializeComponent();
        }

        #endregion

        #region EVENTOS

        //EVENTO DE SELEÇÃO DO TIPO DE PARAMETRO DE GARANTIA
        private void cboParametro_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if ((ServiceGarantiaContrato.TipoParametroGarantia)cboParametro.SelectedItem != null)
            {
                _valorSelecionado = ((ServiceGarantiaContrato.TipoParametroGarantia)cboParametro.SelectedItem).IdTipoParametroGarantia;

                ObterListaRelatorio();
            }
        }

        //EVENTO DO BOTAO DE CANCELAR
        private void btnFechar_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        //EVENTO DO BOTAO DE EXPORTAR RELATORIO
        private void btnExportarArquivo_Click(object sender, RoutedEventArgs e)
        {
            StringBuilder message = new StringBuilder();

            MessageBoxHelper.ShowQuestion("Confirmação", "Confirma a exportação?", window_OnMessageBoxClosed);
        }


        //EVENTO DE FECHAR A MENSAGEM DA TELA
        void window_OnMessageBoxClosed(MessageBoxResult result)
        {
            if (result == MessageBoxResult.Yes)
            {
                GerarRelatorio();

                Encerrar();
            }
        }

        #endregion

        #region METODOS

        //METODO RESPONSAVEL PELA EXIBIÇÃO DA TELA
        public void Exibir()
        {
            this.Visibility = Visibility.Visible;

            this.Show();

            CarregarComboTipoParametro();
        }

        public void Encerrar()
        {
            this.Close();
        }

        //CARREGA A COMBO DE PARAMETROS
        private void CarregarComboTipoParametro()
        {
            ServiceFactory.GetInstance().ServiceGarantiaContrato.BeginObterTipoParametroGarantia(CallBackObterTipoParametroGarantia, ServiceFactory.GetInstance().ServiceGarantiaContrato);
        }

        private void CallBackObterTipoParametroGarantia(IAsyncResult pAsyncResult)
        {
            this.Dispatcher.BeginInvoke(delegate()
            {
                _listTiposParametros = new List<ServiceGarantiaContrato.TipoParametroGarantia>();

                _listTiposParametros = ((ServiceGarantiaContrato.IGarantiaContrato)pAsyncResult.AsyncState).EndObterTipoParametroGarantia(pAsyncResult);

                cboParametro.ItemsSource = _listTiposParametros.Where(t => t.IdTipoParametroGarantia != 5).ToList();

                cboParametro.SelectedIndex = 0;

                _valorSelecionado = 0;
            });
        }


        //CARREGA A COMBO DE PARAMETROS
        private void ObterListaRelatorio()
        {
            ServiceFactory.GetInstance().ServiceGarantiaContrato.BeginObterRelatorioGarantiaContrato(_valorSelecionado, CallBackObterListaRelatorio, ServiceFactory.GetInstance().ServiceGarantiaContrato);
        }

        private void CallBackObterListaRelatorio(IAsyncResult pAsyncResult)
        {
            this.Dispatcher.BeginInvoke(delegate()
            {
                _listRelatorio = new List<ServiceGarantiaContrato.GarantiaContrato>();

                _listRelatorio = ((ServiceGarantiaContrato.IGarantiaContrato)pAsyncResult.AsyncState).EndObterRelatorioGarantiaContrato(pAsyncResult);
            });
        }



        //METODO QUE SERA RESPONSAVEL POR OBTER OS DADOS DO RELATORIO
        private void GerarRelatorio()
        {
            SaveFileDialog dialog = new SaveFileDialog();

            dialog.Filter = "Excel Worksheets 2003 (*.xls, *.xlsx)|*.xls;*.xlsx|Csv files (*.csv)|*.csv";

            bool? dialogResult = dialog.ShowDialog();

            if (dialogResult == true)
            {
                if (_listRelatorio != null)
                {
                    try
                    {
                        if (dialog.FilterIndex == 1)
                        {
                            //CASO SEJA ARQUIVO DO EXCEL

                            using (Stream stream = dialog.OpenFile())
                            {
                                Workbook excelFile = GeraExcel();

                                excelFile.Save(stream);

                                stream.Close();

                                cboParametro.SelectedIndex = 0;

                                MessageBoxHelper.ShowSucess("Atenção", "Arquivo Salvo com Sucesso.");

                                return;
                            }

                        }
                        else
                        {
                            //CASO SEJA ARQUIVO CSV

                            using (Stream stream = dialog.OpenFile())
                            {
                                byte[] tbyte;

                                System.Text.Encoding utf8 = Encoding.UTF8;

                                tbyte = utf8.GetBytes(GeraCSV());

                                stream.Write(tbyte, 0, tbyte.Length);

                                stream.Close();

                                MessageBoxHelper.ShowSucess("Atenção", "Arquivo Salvo com Sucesso.");

                                return;
                            }
                        }
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
                else
                {
                    MessageBoxHelper.ShowWarning("Aviso", "Nenhum Resultado foi encontrado");
                    return;
                }
            }
        }


        //METODO RESPONSAVEL POR MONTAR O ARQUIVO CSV
        private string GeraCSV()
        {

            StringBuilder sbRetorno = new StringBuilder();

            if (_listRelatorio != null)
            {
                sbRetorno.Append("CD_CONTRATO;");
                sbRetorno.Append("ID_CLIENTE;");
                sbRetorno.Append("NO_GARANTIA;");
                sbRetorno.Append("DT_INICIO;");
                sbRetorno.Append("DT_TERMINO;");
                sbRetorno.Append("VL_PARAMETRO;");
                sbRetorno.Append("ID_MOTIVO;");
                sbRetorno.Append("DS_JUSTIFICATIVA\r\n");

                foreach (ServiceGarantiaContrato.GarantiaContrato item in _listRelatorio)
                {
                    sbRetorno.Append(item.CodContrato);
                    sbRetorno.Append(";");

                    sbRetorno.Append(item.CodCliente);
                    sbRetorno.Append(";");

                    sbRetorno.Append(item.CodGarantia);
                    sbRetorno.Append(";");

                    if (item.DtInicio.HasValue)
                    {
                        sbRetorno.Append(item.DtInicio.Value.ToString("dd/MM/yyyy"));
                        sbRetorno.Append(";");
                    }

                    if (item.DtTermino.HasValue)
                    {
                        sbRetorno.Append(item.DtTermino.Value.ToString("dd/MM/yyyy"));
                        sbRetorno.Append(";");
                    }
                    else
                    {
                        sbRetorno.Append("");
                        sbRetorno.Append(";");
                    }

                    sbRetorno.Append(item.VlParametro);
                    sbRetorno.Append(";");

                    sbRetorno.Append(item.IdMotivo.ToString());
                    sbRetorno.Append(";");

                    sbRetorno.Append(item.DsJustificativa);
                    sbRetorno.Append("\r\n");
                }
            }

            return sbRetorno.ToString();
        }


        //METODO RESPONSAVEL POR MONTAR O ARQUIVO EXCEL
        private Workbook GeraExcel()
        {
            Workbook workBook = new Workbook();

            int _lin = 0;

            if (_listRelatorio != null)
            {
                Worksheet workSheet = workBook.Worksheets.Add("Garantias");

                workSheet.Rows[0].Cells[0].Value = "CD_CONTRATO";
                workSheet.Rows[0].Cells[1].Value = "ID_CLIENTE";
                workSheet.Rows[0].Cells[2].Value = "NO_GARANTIA";
                workSheet.Rows[0].Cells[3].Value = "DT_INICIO";
                workSheet.Rows[0].Cells[4].Value = "DT_TERMINO";
                workSheet.Rows[0].Cells[5].Value = "VL_PARAMETRO";
                workSheet.Rows[0].Cells[6].Value = "ID_MOTIVO";
                workSheet.Rows[0].Cells[7].Value = "DS_JUSTIFICATIVA";

                foreach (ServiceGarantiaContrato.GarantiaContrato item in _listRelatorio)
                {
                    ++_lin;

                    workSheet.Rows[_lin].Cells[0].Value = item.CodContrato.ToString();
                    workSheet.Rows[_lin].Cells[1].Value = item.CodCliente.ToString();
                    workSheet.Rows[_lin].Cells[2].Value = item.CodGarantia.HasValue ? item.CodGarantia.Value.ToString() : String.Empty;
                    workSheet.Rows[_lin].Cells[3].Value = item.DtInicio.ToString();
                    workSheet.Rows[_lin].Cells[4].Value = item.DtTermino.HasValue ? item.DtTermino.Value.ToString() : String.Empty;
                    workSheet.Rows[_lin].Cells[5].Value = item.VlParametro;
                    workSheet.Rows[_lin].Cells[6].Value = item.IdMotivo.HasValue ? item.IdMotivo.Value.ToString() : String.Empty;
                    workSheet.Rows[_lin].Cells[7].Value = item.DsJustificativa;
                }
            }
            return workBook;
        }

        #endregion

    }
}